# 函数的参数练习


# 位置参数：求某个数与它自己相乘的结果（某个数的平方）
def test1(x):
    return x * x


# 默认参数：计算x的n次方，如果没有n参数，则默认为2
def test2(x, n=2):
    s = 1
    while n > 0:
        s = s * x
        n = n - 1

    return s


# 传入的参数必须为不可变对象，所以下面这个例子逻辑上会发生错误，默认参数是函数定义的时候就固定了的值，而不是调用的时候才决定
def test2_1(l=[]):
    l.append("END")
    return l


# print(test2(3))
# print(test2(3, 4))
# print(test2_1())
# print(test2_1())

# 可变参数：可以输入任意个参数,如果是列表或者元组，即list或者tuple，调用时需要在参数前加上*
def test3(*nums):
    s = 0
    for i in nums:
        s = s + i
    print(s)

# test3()
# test3(1, 2)
# test3(1, 2, 3)
# test3(*[1, 2, 3])
# test3(*(1, 2, 3))


def test4(name, age, **kw):
    print("name:", name, "age:", age, "others:", kw)


test4("Jack", 24, city="Beijing", gender="M")
